package uoc.biblioteca.util;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import uoc.biblioteca.mappings.object.LlibreVo;

public class ReaderExcel {

	private String inputFile;
	
	//Columna 0 --> Titol
	//Columna 1 --> Autor
	//Columna 2 --> ISBN
	//Columna 3 --> EDITORIAL
	//Columna 4 --> EDICIO
	//Columna 5 --> NUMERO EJEMPLARES
	//Columna 6 --> PREU
	//Columna 7 --> URL
	//Columna 8 --> OBSERVACIONS
	
	private static int COLUMN_TITOL = 0;
	private static int COLUMN_AUTOR = 1;
	private static int COLUMN_ISBN = 2;
	private static int COLUMN_EDITORIAL = 3;
	private static int COLUMN_EDICIO = 4;
	private static int COLUMN_NUMEJEM = 5;
	private static int COLUMN_PREU = 6;
	private static int COLUMN_URL = 7;
	private static int COLUMN_OBSERVACIONS = 8;

	public void setInputFile(String inputFile) {
		this.inputFile = inputFile;
	}

	public LlibreVo[] read() throws IOException  {
		
		LlibreVo[] llibres = null;
		//Llibre llibre = new Llibre();
		List llibresList = new ArrayList();
		
		File inputWorkbook = new File(inputFile);
		Workbook w;
		
		boolean validateError=false;
		boolean validateTitol=false;
		int contIdLlibre=0;
		
		try {
			w = Workbook.getWorkbook(inputWorkbook);
			// Get the first sheet
			Sheet sheet = w.getSheet(0);
			
			for (int j = 0; j < sheet.getRows(); j++) {
				
				LlibreVo llibre = new LlibreVo();
				
				for (int i = 0; i < sheet.getColumns(); i++) {
					
					Cell cell = sheet.getCell(i, j);
					
					if(j!=0 && !validateError ){
						
						if(i==COLUMN_TITOL){
							llibre.setTitol(cell.getContents());
						}
						else if(i==COLUMN_AUTOR){
							llibre.setAutor(cell.getContents());
						}
						else if(i==COLUMN_ISBN){
							llibre.setIsbn(cell.getContents());
						}
						else if(i==COLUMN_EDITORIAL){
							llibre.setEditorial(cell.getContents());
						}
						else if(i==COLUMN_EDICIO){
							String edidcioString = cell.getContents();
							edidcioString=edidcioString.replaceAll(",",".");
							if(!("").equals(edidcioString)){
								llibre.setEdicio(edidcioString);
							}
							
						}
						else if(i==COLUMN_NUMEJEM){
							//String numEjemString = cell.getContents();
							//numEjemString=numEjemString.replaceAll(",",".");
							if(cell.getContents()==null || cell.getContents().equals("")){
								llibre.setNexemplars("1");
							}
							else{
								llibre.setNexemplars(cell.getContents());
							}
						}
						else if(i==COLUMN_PREU){
							
							String preuString = cell.getContents();
							preuString=preuString.replaceAll(",",".");
							
							if(!("").equals(preuString)){
								llibre.setPreu(new Double(preuString));
							}
						}
						else if(i==COLUMN_URL){
							llibre.setUrl(cell.getContents());
						}
						else if(i==COLUMN_OBSERVACIONS){
							llibre.setObservacions(cell.getContents());
						}
					}
				}
				if(j!=0){
					llibre.setTipoEnvio("normal");
					
					if(!("").equals(llibre.getTitol())){
						llibre.setIdLlibre(contIdLlibre);
						llibresList.add(llibre);
						contIdLlibre++;
					}
				}
			}
			
			llibres = (LlibreVo[]) llibresList.toArray(new LlibreVo[0]);
			
		} catch (BiffException e) {
			e.printStackTrace();
			return null;
		}
		
		return llibres;
		
	}

	
	public boolean validate() throws IOException  {
		
		File inputWorkbook = new File(inputFile);
		Workbook w;
		
		boolean validateError=false;
		
		try {
			w = Workbook.getWorkbook(inputWorkbook);
			// Get the first sheet
			Sheet sheet = w.getSheet(0);
			
			for (int j = 0; j < sheet.getRows(); j++) {
				
				
				for (int i = 0; i < sheet.getColumns(); i++) {
					
					Cell cell = sheet.getCell(i, j);

					if(j==0){
						if(i==COLUMN_TITOL){
							if(!cell.getContents().equals("TITOL")){
								validateError=true;
							}
						}
						if(i==COLUMN_AUTOR){
							if(!cell.getContents().equals("AUTOR")){
								validateError=true;
							}
						}
						if(i==COLUMN_ISBN){
							if(!cell.getContents().equals("ISBN")){
								validateError=true;
							}
						}
						if(i==COLUMN_EDITORIAL){
							if(!cell.getContents().equals("EDITORIAL")){
								validateError=true;
							}
						}
						if(i==COLUMN_EDICIO){
							if(!cell.getContents().equals("EDICIO")){
								validateError=true;
							}
						}
						if(i==COLUMN_NUMEJEM){
							if(!cell.getContents().equals("NUMERO EJEMPLARES")){
								validateError=true;
							}
						}
						if(i==COLUMN_PREU){
							if(!cell.getContents().equals("PREU")){
								validateError=true;
							}
						}
						if(i==COLUMN_URL){
							if(!cell.getContents().equals("URL")){
								validateError=true;
							}
						}
						if(i==COLUMN_OBSERVACIONS){
							if(!cell.getContents().equals("OBSERVACIONS")){
								validateError=true;
							}
						}
					}
				}
			}
			
			
		} catch (BiffException e) {
			e.printStackTrace();
			return false;
		}
		
		return validateError;
		
	}
	
}
